#include "Meta.h"

#include "memdb/impl/simple/KvTable.h"

namespace memdb {
namespace impl {
namespace simple {

Meta::Meta(const std::filesystem::path & dbpath)
: _dbpath(dbpath)
, _dir(_dbpath/ "meta")
, _table(new KvTable(_dir, "__meta"))
{
}
Meta::~Meta(){
}

std::error_code Meta::open() {
	return _table->open();
}
std::error_code Meta::close() {
	return _table->close();
}
bool Meta::isOpened() const {
	return _table->isOpened();
}

std::error_code Meta::destroy(){
	if(isOpened()){
		if(auto && ec = close(); ec){
			return ec;
		}
	}

	if(auto && ec = _table->destroy(); ec){
		return ec;
	}
	std::filesystem::remove_all(_dir);
	return std::error_code();
}
bool Meta::exists() const{
	return _table->exists();
}



std::error_code Meta::insert(const std::string & key, const std::string & value){
	return _table->records().insert(key, value);
}
std::error_code Meta::remove(const std::string & key){
	return _table->records().remove(key);
}
size_t Meta::count() const{
	return _table->records().count();
}

std::unique_ptr<helper::iter::Iterator<Meta::Item>> Meta::iterator() const{
	return _table->records().iterator();
}

}//namespace simple
}//namespace impl
}//namespace memdb
